Customise palettes and shapes according to the data structure.

rm(list = ls(all = TRUE))
source('01_f-ctions.R')

Data files structure: 1st column is SampleName (link to phenodata), followed by measured variables

Path to data: ../input/

fp = file.path('..', 'input')
list.files(fp, pattern = '.txt$')
## [1] "data_hormonomics.txt"  "data_metabolomics.txt" "data_qPCR.txt"

Path to Phenodata: ../../../

fp = file.path('..', '..', '..')
list.files(fp, pattern = '.txt$')
## [1] "phenodata_20221001.txt"

There may be multiple phenodata versions (see pISA-tree INSTRUCTIONS.pdf

In this caste, SampleName is created as: Treatment_Day_PlantNoNo

fn = 'phenodata_20221001.txt'
pheno = data.table::fread(file.path(fp, fn), header = TRUE)
data.table::setDF(pheno)

pheno = pheno[, grep('^SampleName$|^Treatment$|^SamplingDay$|^PlantNo$', colnames(pheno))]
head(pheno)
##   SampleName Treatment SamplingDay PlantNo
## 1    C_S1_10         C           1      10
## 2     C_S1_7         C           1       7
## 3     C_S1_8         C           1       8
## 4     C_S1_9         C           1       9
## 5    C_S7_11         C           7      11
## 6    C_S7_12         C           7      12
tail(pheno)
##    SampleName Treatment SamplingDay PlantNo
## 27    H_S8_17         H           8      17
## 28    H_S8_18         H           8      18
## 29   H_S14_19         H          14      19
## 30   H_S14_20         H          14      20
## 31   H_S14_21         H          14      21
## 32   H_S14_22         H          14      22
table(pheno$Treatment, pheno$SamplingDay)
##    
##     1 7 8 14
##   C 4 4 4  4
##   H 4 4 4  4

Each condition has 4 replicates

1 tissue: leaves

1.1 Omics level: hormonomics

tissue = 'Leaves'
o.l. = 'Hormonomics'

1.1.1 Read data

fpi = file.path('..', 'input')
fn = 'data_hormonomics.txt'
horm = data.table::fread(file.path(fpi, fn), header = TRUE)
data.table::setDF(horm)

horm = merge(pheno, 
             horm, 
             by = 'SampleName', 
             all.x = FALSE, 
             all.y = TRUE)
horm = horm[, -grep('SampleName', colnames(horm))]

horm$SamplingDay = as.numeric(horm$SamplingDay)
horm$Treatment = factor(horm$Treatment)
horm = horm[order(horm$Treatment, horm$SamplingDay, horm$PlantNo), ]

horm.long = reshape2::melt(horm[, -c(grep('PlantNo', colnames(horm)))], id.vars=c("Treatment",   "SamplingDay"))
horm.long$SamplingDay = as.numeric(horm.long$SamplingDay)
keep2 = grep('PlantNo|Treatment|SamplingDay', colnames(horm), invert = TRUE)

1.1.2 Plot data with ggplot

myplot.ggplot(df = horm.long, x = horm.long$Treatment, y = horm.long$value, 
              ncol = ceiling(length(levels(horm.long$variable))/2), 
              scales.y = "free_y", 
              title = stringr::str_c(o.l., 
                                     '\n', 
                                     stringr::str_c(unique(horm.long$Treatment), collapse=', '),
                                     collapse='' ), 
              xlab = 'Treatment', 
              ylab = 'value', 
              palette = my.ggplot.palette)

graphs = horm.long %>%
  dplyr::group_by(variable) %>%
  rstatix::doo(
    ~ggpubr::ggdotplot(
      data =., 
      x = "SamplingDay", 
      y = "value",
      fill = "Treatment", 
      palette = my.ggplot.palette, 
      legend = "none",
      add = c("jitter", "mean_sd"),
      position = position_jitter(0.05),
      ggtheme = ggpubr::theme_pubr(),
      facet.by = c("Treatment")
      )
      , result = "plots"
    )

variable = levels(graphs$variable)
plots = graphs$plots %>% set_names(variable)
for(var in variable){
  graph.i = plots[[var]] +
    labs(title = var)
  print(graph.i)
} 

1.1.3 NMDS

1.1.3.1 On all

subset = horm
mymat = subset[, keep2]
time.levels = sort(as.numeric(unique(subset$SamplingDay)))
stress.levels = levels(subset$Treatment)
k = 3

NMDS.plots = my.NMDS(mymat = mymat, 
                     subset = subset, 
                     stress.levels = stress.levels,
                     time.levels = time.levels,
                     title = o.l.,
                     k = k) # dimensions

if (k == 3){
  cowplot::plot_grid(NMDS.plots[[1]], NMDS.plots[[2]], NMDS.plots[[3]],  
                     NMDS.plots[[4]], NMDS.plots[[5]], NMDS.plots[[6]],
                     ncol=3, nrow = 2)
} else {
  cowplot::plot_grid(NMDS.plots[[1]])
}

1.1.3.2 Specific Condition

subset = horm[horm$SamplingDay %in% time.levels[c(1, 4)], ]
mymat = subset[, keep2]
time.levels = sort(as.numeric(unique(subset$SamplingDay)))
stress.levels = levels(subset$Treatment)
k = 3

NMDS.plots = my.NMDS(mymat = mymat, 
                     subset = subset, 
                     stress.levels = stress.levels,
                     time.levels = time.levels,
                     title = o.l.,
                     k = k) # dimensions

if (k == 3){
  cowplot::plot_grid(NMDS.plots[[1]], NMDS.plots[[2]], NMDS.plots[[3]],  
                     NMDS.plots[[4]], NMDS.plots[[5]], NMDS.plots[[6]],
                     ncol=3, nrow = 2)
} else {
  cowplot::plot_grid(NMDS.plots[[1]])
}

subset = horm[horm$Treatment %in% stress.levels[2], ]
mymat = subset[, keep2]
time.levels = sort(as.numeric(unique(subset$SamplingDay)))
stress.levels = levels(subset$Treatment)
k = 2

NMDS.plots = my.NMDS(mymat = mymat, 
                     subset = subset, 
                     stress.levels = stress.levels,
                     time.levels = time.levels,
                     title = o.l.,
                     k = k) # dimensions

if (k == 3){
  cowplot::plot_grid(NMDS.plots[[1]], NMDS.plots[[2]], NMDS.plots[[3]],  
                     NMDS.plots[[4]], NMDS.plots[[5]], NMDS.plots[[6]],
                     ncol=3, nrow = 2)
} else {
  cowplot::plot_grid(NMDS.plots[[1]])
}

1.1.4 correlation

par(mfrow = c(2,2))
my.cor.plot(mymat = as.matrix(horm[, keep2]), 
            main = paste(o.l., '(all tp)'), 
            col = rev(my.heatmap.col1), 
            order = 'original', 
            type = 'pearson', 
            choose = 1)
## A visualization of a correlation matrix
my.cor.plot(mymat = as.matrix(horm[, keep2]), 
            main = paste(o.l., '(all tp)'), 
            col = rev(my.heatmap.col2), 
            order = 'original', 
            type = 'pearson', 
            choose = 1)
## A visualization of a correlation matrix
my.cor.plot(mymat = as.matrix(horm[, keep2]), 
            main = paste(o.l., '(all tp)'), 
            col = rev(my.heatmap.col1), 
            order = 'hclust', 
            type = 'pearson', 
            choose = 2)
## A visualization of a correlation matrix
my.cor.plot(mymat = as.matrix(horm[, keep2]), 
            main = paste(o.l., '(all tp)'), 
            col = rev(my.heatmap.col2), 
            order = 'hclust', 
            type = 'pearson', 
            choose = 2)
## A visualization of a correlation matrix

par(mfrow = c(1,1))



my.pairs.panels(df = as.matrix(horm[, keep2]), 
                method = "pearson", 
                palette = my.ggplot.palette, 
                scale = FALSE,
                main = paste(o.l., '(all tp)'),
                cex.labels = 1.5, 
                cex = 1)
## SPLOM, histograms and correlations for a data matrix

1.1.5 cor groups

Here we have one Control and one Stress level - adapt as needed

print(stress.levels)
## [1] "C" "H"
Ctrl = as.matrix(horm[horm$Treatment == stress.levels[1], keep2])
Stress = as.matrix(horm[horm$Treatment == stress.levels[2], keep2])

par(mfrow=c(2,2))
my.cor.plot(mymat = Ctrl,
            main = 'pearson cor (all tp)\nCtrl',
            col = rev(my.heatmap.col1),
            order = 'original',
            type = 'pearson',
            choose = 1)
## A visualization of a correlation matrix
my.cor.plot(mymat = Stress,
            main = 'pearson cor (all tp)\nStress',
            col = rev(my.heatmap.col1),
            order = 'original',
            type = 'pearson',
            choose = 1)
## A visualization of a correlation matrix
my.cor.plot(mymat = Ctrl,
            main = 'pearson cor (all tp)\nCtrl',
            col = rev(my.heatmap.col2),
            order = 'original',
            type = 'pearson',
            choose = 1)
## A visualization of a correlation matrix
my.cor.plot(mymat = Stress,
            main = 'pearson cor (all tp)\nStress',
            col = rev(my.heatmap.col2),
            order = 'original',
            type = 'pearson',
            choose = 1)
## A visualization of a correlation matrix

par(mfrow=c(1,1))

par(mfrow=c(2,2))
palCS = rainbow(length(time.levels))[as.numeric(as.factor(horm[horm$Treatment == stress.levels[1], 2]))]
pie(rep(1, length(time.levels)), 
    col = unique(palCS), 
    labels = unique(horm[horm$Treatment == stress.levels[1], 2]), 
    main = paste(stress.levels, collapse = ' '))
par(mfrow=c(1,1))

my.pairs.panels(df = Ctrl, 
                method = "pearson", 
                palette = palCS, 
                scale = FALSE,
                main = paste(o.l., 'Ctrl (all tp)'),
                cex.labels = 1.5, 
                cex = 1)
## SPLOM, histograms and correlations for a data matrix

my.pairs.panels(df = Stress, 
                method = "pearson", 
                palette = palCS, 
                scale = FALSE,
                main = paste(o.l., 'Stress (all tp)'),
                cex.labels = 1.5, 
                cex = 1)
## SPLOM, histograms and correlations for a data matrix

1.1.6 cor dist

1.1.6.1 At specific time points

Ctrl = (horm[(horm$Treatment == stress.levels[1]) & 
               (horm$SamplingDay %in% time.levels[c(1, 4)]), 1:ncol(horm)])
Stress =  (horm[(horm$Treatment == stress.levels[2]) & 
                  (horm$SamplingDay %in% time.levels[c(1, 4)]), 1:ncol(horm)])

Ctrl[Ctrl$SamplingDay != 1,]$SamplingDay = 2
Stress[Stress$SamplingDay != 1,]$SamplingDay = 2
my.c.list = list (cor(Ctrl[, keep2], use = 'na.or.complete'), 
                  cor(Stress[, keep2], use = 'na.or.complete'))
names(my.c.list) = c('Ctrl', 'Stress')


comb = RcppAlgos::comboGrid(1:length(my.c.list), 1:length(my.c.list),  repetition = FALSE)

for (i in 1:nrow(comb)){
  

  cat('blue'(names(my.c.list)[comb[i,1]], names(my.c.list)[comb[i,2]], '\n'))
  a = my.c.list[[comb[i,1]]]
  b = my.c.list[[comb[i,2]]]

  plot = my.pheatmap(df = a, 
                      main = names(my.c.list)[comb[i,1]], 
                      col = rev(my.heatmap.col1),
                      breaks = setdiff(seq(-1, 1, 0.1), 0),
                     silent = TRUE) 
  myplots = list(plot[[4]])
  plot = my.pheatmap(df = a, 
                      main = names(my.c.list)[comb[i,1]], 
                      col = rev(my.heatmap.col2),
                      breaks = setdiff(seq(-1, 1, 0.1), 0),
                     silent = TRUE) 
  myplots[[2]] = (plot[[4]])
  
  
  plot = my.pheatmap(df = b, 
                      main = names(my.c.list)[comb[i,2]], 
                      col = rev(my.heatmap.col1),
                      breaks = setdiff(seq(-1, 1, 0.1), 0),
                     silent = TRUE) 
  myplots[[3]] = (plot[[4]])
  plot = my.pheatmap(df = b, 
                      main = names(my.c.list)[comb[i,2]], 
                      col = rev(my.heatmap.col2),
                      breaks = setdiff(seq(-1, 1, 0.1), 0),
                     silent = TRUE) 
  myplots[[4]] = (plot[[4]])
  

  diff = abs(a - b)
  plot = my.pheatmap(df = diff,
                      col = rev(my.dist.col), 
                      main = paste0('Diffrence ', 
                                    names(my.c.list)[comb[i,1]], ' - ', 
                                    names(my.c.list)[comb[i,2]]),
                      breaks = seq(0, 2, 0.2),
                     silent = TRUE)
  myplots[[5]] = (plot[[4]])
  plot = my.pheatmap(df = diff,
                      col = rev(my.dist.col2), 
                      main = paste0('Diffrence ', 
                                    names(my.c.list)[comb[i,1]], ' - ', 
                                    names(my.c.list)[comb[i,2]]),
                      breaks = seq(0, 2, 0.2),
                     silent = TRUE)
  myplots[[6]] = (plot[[4]])

  gridExtra::grid.arrange(gridExtra::arrangeGrob(myplots[[1]], myplots[[3]], myplots[[5]], ncol=3),
                          gridExtra::arrangeGrob(myplots[[2]], myplots[[4]], myplots[[6]], ncol=3),
                          nrow = 2)

  
  
}
## Ctrl Stress

1.1.7 t-tests

data = rbind(Ctrl, Stress)
tmp = c(rep('Ctrl', nrow(Ctrl)),
        rep('Stress', nrow(Stress)))
data$Treatment = tmp
data$Treatment = paste(data$Treatment, data$SamplingDay, sep = '_')

cat(blue('Time defined: 1\n'))
## Time defined: 1
data.1 = data[data$SamplingDay == 1, ]
data.1.1 = data.1[data.1$Treatment %in% c('Ctrl_1', 'Stress_1'), ]
stat.test.1.1 = my.customised.t.test(data = data.1.1[, -grep('PlantNo|SamplingDay', colnames(data.1.1))], 
                                     var.levels = colnames(data.1.1[, keep2]), 
                                     stress.levels = unique(data.1.1$Treatment),
                                     plot.violin = FALSE, 
                                     plot.box = FALSE, 
                                     plot.dot = TRUE,
                                     single = TRUE,
                                     y.lab = o.l.,
                                     p.cex.labels = 1, 
                                     p.cex = 0.5,
                                     p.palette = my.ggplot.palette)

cat(blue('Time defined: 2\n'))
## Time defined: 2
data.2 = data[data$SamplingDay == 2, ]
data.2.1 = data.2[data.2$Treatment %in% c('Ctrl_2', 'Stress_2'), ]
stat.test.2.1 = my.customised.t.test(data = data.2.1[, -grep('PlantNo|SamplingDay', colnames(data.2.1))], 
                                 var.levels = colnames(data.2.1[, keep2]), 
                                 stress.levels = unique(data.2.1$Treatment),
                                 plot.violin = FALSE, 
                                 plot.box = FALSE, 
                                 plot.dot = TRUE,
                                 single = TRUE,
                                 y.lab = o.l.,
                                 p.cex.labels = 1, 
                                 p.cex = 0.5,
                                 p.palette = my.ggplot.palette)

stat.test = rbind(stat.test.1.1,
                  stat.test.2.1)
data.table::setDT(stat.test)
stat.test.leaves.hormonomics = stat.test
ind = (grep('groups', colnames(stat.test.leaves.hormonomics)))
stat.test.leaves.hormonomics = stat.test.leaves.hormonomics[, -..ind]

fpo = file.path('..', 'reports')
fn = paste0(tissue, '-', o.l., '_t.tests.txt')
write.table(stat.test.leaves.hormonomics,
            file = file.path(fpo, fn), 
            append = FALSE, 
            quote = FALSE, 
            sep = "\t",
            eol = "\n", 
            na = "NA", 
            dec = ".", 
            row.names = TRUE,
            col.names = TRUE, 
            qmethod = 'escape',
            fileEncoding = "UTF-8")

rcorr Computes a matrix of Pearson’s r or Spearman’s rho rank correlation coefficients for all possible pairs of columns of a matrix. Missing values are deleted in pairs rather than deleting all rows of x having any missing variables. Ranks are computed using efficient algorithms (see reference 2), using midranks for ties.

1.1.8 heatmap on Treatment START/STOP (as defined) data

my.heatmaply.cor(df = data[, keep2], 
                 type = 'pearson', 
                 dist_method = 'minkowski', 
                 hclust_method = 'ward.D2',
                 main = paste(o.l., 'Treatment [start, stop]\nrcorr, p-val, minkowski, Ward.2'),
                 colors = rev(my.heatmap.col1))
## Matrix of Correlations and P-values with Cluster heatmap based on plotly
my.heatmaply.cor(df = data[, keep2], 
                 type = 'pearson', 
                 dist_method = 'minkowski', 
                 hclust_method = 'ward.D2',
                 main = paste(o.l., 'Treatment [start, stop]\nrcorr, p-val, minkowski, Ward.2'),
                 colors = rev(my.heatmap.col2))
## Matrix of Correlations and P-values with Cluster heatmap based on plotly

1.1.9 logFC START/STOP Treatment

leaf.horm.log2FC = my.logFC(Ctrl = Ctrl,
                            Stress = Stress,  
                            tp = 2, 
                            title = o.l.)

mm = list(
    l = 0,
    r = 0,
    b = 0,
    t = 40
)
m = max(abs(min(leaf.horm.log2FC, na.rm = TRUE)), abs(max(leaf.horm.log2FC, na.rm = TRUE)))
p = plot_ly(z = leaf.horm.log2FC, 
            type = "heatmap",
            y = rownames(leaf.horm.log2FC), 
            x = colnames(leaf.horm.log2FC),
            colors = rev(brewer.pal(n, 'RdBu')),
            zmax = m, 
            zmid = 0, 
            zmin = -m,
            width = 600, 
            height = 300
            ) %>%
  layout(title = paste(tissue, o.l.), 
         margin = mm)
print(p)

fpo = file.path('..', 'reports')
fn = paste0(tissue, '-', o.l., '_log2FC.html')
saveWidget(p, 
           file = file.path(fpo, fn),
           selfcontained = TRUE)



fn = paste0(tissue, '-', o.l., '_log2FC.txt')
write.table(leaf.horm.log2FC,
            file = file.path(fpo, fn), 
            append = FALSE, 
            quote = FALSE, 
            sep = "\t",
            eol = "\n", 
            na = "NA", 
            dec = ".", 
            row.names = TRUE,
            col.names = TRUE, 
            qmethod = 'escape',
            fileEncoding = "UTF-8")
rm(list=setdiff(ls(), c('pheno',
                        'horm'
                        )))
gc()
source('01_f-ctions.R')

gc()

1.2 Omics level: metabolomics

tissue = 'Leaves'
o.l. = 'Metabolomics'

1.2.1 Read data

fpi = file.path('..', 'input')
fn = 'data_metabolomics.txt'
met = data.table::fread(file.path(fpi, fn), header = TRUE)
data.table::setDF(met)

met = merge(pheno, 
             met, 
             by = 'SampleName', 
             all.x = FALSE, 
             all.y = TRUE)
met = met[, -grep('SampleName', colnames(met))]

met$SamplingDay = as.numeric(met$SamplingDay)
met$Treatment = factor(met$Treatment)
met = met[order(met$Treatment, met$SamplingDay, met$PlantNo), ]

Repeat procedure as for Hormonomics

rm(list=setdiff(ls(), c('pheno',
                        'horm',
                        'met'
                        )))
gc()
source('01_f-ctions.R')

gc()

1.3 Omics level: transcriptomics

tissue = 'Leaves'
o.l. = 'Transcriptomics'

1.3.1 Read data

fpi = file.path('..', 'input')
fn = 'data_qPCR.txt'
qPCR = data.table::fread(file.path(fpi, fn), header = TRUE)
data.table::setDF(qPCR)

qPCR = merge(pheno, 
             qPCR, 
             by = 'SampleName', 
             all.x = FALSE, 
             all.y = TRUE)
qPCR = qPCR[, -grep('SampleName', colnames(qPCR))]

qPCR$SamplingDay = as.numeric(qPCR$SamplingDay)
qPCR$Treatment = factor(qPCR$Treatment)
qPCR = qPCR[order(qPCR$Treatment, qPCR$SamplingDay, qPCR$PlantNo), ]

Repeat procedure as for Hormonomics and Metabolomics

rm(list=setdiff(ls(), c('pheno',
                        'horm',
                        'met',
                        'qPCR'
                        )))
gc()
source('01_f-ctions.R')

gc()

save.image(file = "01.RData")

2 Multi-Omics

2.1 data

colM = colnames(met)
colT = colnames(qPCR)
colH = colnames(horm)

omics = merge(qPCR, met, 
              by = c("Treatment", "SamplingDay", "PlantNo"), 
              all.x = FALSE, all.y = FALSE)
omics = merge(omics, horm, 
              by = c("Treatment", "SamplingDay", "PlantNo"), 
              all.x = FALSE, all.y = FALSE)

omics$SamplingDay = as.numeric(omics$SamplingDay)


keep2 = grep("Treatment|SamplingDay|PlantNo", colnames(omics), invert = TRUE)

MT = intersect(keep2,
               which(colnames(omics) %in% c(colM, colT)))
MH = intersect(keep2,
               which(colnames(omics) %in% c(colM, colH)))
TH = intersect(keep2,
               which(colnames(omics) %in% c(colT, colH)))

2.2 graph cor

“cor” Plots a correlation network. Runs cov2cor if input is detected to be a covariance matrix and plots the input as is

“pcor” Plots a partial correlation network, using cor2pcor from the parcor package (Kraemer, Schaefer and Boulesteix, 2009) on the input matrix

“glasso” Will run EBICglasso to obtain an optimal sparse estimate of the partial correlation matrix using the glasso package (Friedman, Hastie and Tibshirani, 2011)

cormat = cor(as.matrix(omics[, keep2]), use = 'na.or.complete')
qgraph::qgraph(cormat, 
               shape='circle', 
               posCol='darkred', 
               negCol='darkblue',
               layout='spring', 
               vsize = 4, 
               cut = 0.95, 
               details = TRUE, 
               curveAll = TRUE,
               title = 'Omics',
               minimum = 0.70,
               labels = colnames(omics[, keep2]),
               label.cex = 1.5)

For more options see https://www.rdocumentation.org/packages/qgraph/versions/1.9.3/topics/qgraph

devtools::session_info()
## - Session info ---------------------------------------------------------------
##  setting  value
##  version  R version 4.1.2 (2021-11-01)
##  os       Windows 10 x64 (build 19044)
##  system   x86_64, mingw32
##  ui       RTerm
##  language (EN)
##  collate  English_United Kingdom.1252
##  ctype    English_United Kingdom.1252
##  tz       Europe/Prague
##  date     2023-01-10
##  pandoc   2.19.2 @ C:/Program Files/RStudio/bin/quarto/bin/tools/ (via rmarkdown)
## 
## - Packages -------------------------------------------------------------------
##  package       * version    date (UTC) lib source
##  abind           1.4-5      2016-07-21 [1] CRAN (R 4.1.1)
##  assertthat      0.2.1      2019-03-21 [1] CRAN (R 4.1.3)
##  backports       1.4.1      2021-12-13 [1] CRAN (R 4.1.2)
##  base64enc       0.1-3      2015-07-28 [1] CRAN (R 4.1.1)
##  bigassertr      0.1.5      2021-07-08 [1] CRAN (R 4.1.3)
##  bigparallelr    0.3.2      2021-10-02 [1] CRAN (R 4.1.3)
##  bigstatsr       1.5.12     2022-10-14 [1] CRAN (R 4.1.3)
##  bnlearn         4.8.1      2022-09-21 [1] CRAN (R 4.1.3)
##  boot            1.3-28.1   2022-11-22 [1] CRAN (R 4.1.2)
##  broom           1.0.1      2022-08-29 [1] CRAN (R 4.1.3)
##  bslib           0.4.2      2022-12-16 [1] CRAN (R 4.1.3)
##  ca              0.71.1     2020-01-24 [1] CRAN (R 4.1.3)
##  cachem          1.0.6      2021-08-19 [1] CRAN (R 4.1.2)
##  callr           3.7.3      2022-11-02 [1] CRAN (R 4.1.3)
##  car             3.1-1      2022-10-19 [1] CRAN (R 4.1.3)
##  carData         3.0-5      2022-01-06 [1] CRAN (R 4.1.3)
##  caret         * 6.0-93     2022-08-09 [1] CRAN (R 4.1.3)
##  checkmate       2.1.0      2022-04-21 [1] CRAN (R 4.1.3)
##  class           7.3-20     2022-01-13 [1] CRAN (R 4.1.2)
##  classInt        0.4-8      2022-09-29 [1] CRAN (R 4.1.3)
##  cli             3.4.1      2022-09-23 [1] CRAN (R 4.1.2)
##  cluster         2.1.4      2022-08-22 [1] CRAN (R 4.1.3)
##  codalm          0.1.2      2021-07-26 [1] CRAN (R 4.1.3)
##  codetools       0.2-18     2020-11-04 [1] CRAN (R 4.1.2)
##  colorspace      2.0-3      2022-02-21 [1] CRAN (R 4.1.2)
##  Compositional * 6.0        2022-11-12 [1] CRAN (R 4.1.3)
##  corpcor         1.6.10     2021-09-16 [1] CRAN (R 4.1.1)
##  corrplot      * 0.92       2021-11-18 [1] CRAN (R 4.1.3)
##  cowplot         1.1.1      2020-12-30 [1] CRAN (R 4.1.3)
##  crayon        * 1.5.2      2022-09-29 [1] CRAN (R 4.1.3)
##  crosstalk       1.2.0      2021-11-04 [1] CRAN (R 4.1.3)
##  data.table      1.14.6     2022-11-16 [1] CRAN (R 4.1.2)
##  DBI             1.1.3      2022-06-18 [1] CRAN (R 4.1.3)
##  dcov            0.1.1      2020-06-25 [1] CRAN (R 4.1.3)
##  deldir          1.0-6      2021-10-23 [1] CRAN (R 4.1.1)
##  dendextend      1.16.0     2022-07-04 [1] CRAN (R 4.1.3)
##  DEoptimR        1.0-11     2022-04-03 [1] CRAN (R 4.1.3)
##  devtools        2.4.5.9000 2022-11-23 [1] Github (r-lib/devtools@aa3f88b)
##  digest          0.6.31     2022-12-11 [1] CRAN (R 4.1.3)
##  Directional     5.6        2022-09-22 [1] CRAN (R 4.1.3)
##  doParallel      1.0.17     2022-02-07 [1] CRAN (R 4.1.2)
##  dplyr           1.0.10     2022-09-01 [1] CRAN (R 4.1.3)
##  e1071           1.7-12     2022-10-24 [1] CRAN (R 4.1.3)
##  ellipsis        0.3.2      2021-04-29 [1] CRAN (R 4.1.2)
##  emplik          1.2        2022-07-03 [1] CRAN (R 4.1.3)
##  energy          1.7-10     2022-04-19 [1] CRAN (R 4.1.3)
##  equalCovs     * 1.0        2018-04-25 [1] CRAN (R 4.1.1)
##  evaluate        0.19       2022-12-13 [1] CRAN (R 4.1.3)
##  fansi           1.0.3      2022-03-24 [1] CRAN (R 4.1.3)
##  farver          2.1.1      2022-07-06 [1] CRAN (R 4.1.3)
##  fastmap         1.1.0      2021-01-25 [1] CRAN (R 4.1.2)
##  fdrtool         1.2.17     2021-11-13 [1] CRAN (R 4.1.2)
##  FlexDir         1.0        2017-03-16 [1] CRAN (R 4.1.3)
##  flock           0.7        2016-11-12 [1] CRAN (R 4.1.3)
##  foreach         1.5.2      2022-02-02 [1] CRAN (R 4.1.2)
##  foreign         0.8-83     2022-09-28 [1] CRAN (R 4.1.3)
##  Formula       * 1.2-4      2020-10-16 [1] CRAN (R 4.1.1)
##  fs              1.5.2      2021-12-08 [1] CRAN (R 4.1.2)
##  future          1.29.0     2022-11-06 [1] CRAN (R 4.1.3)
##  future.apply    1.10.0     2022-11-05 [1] CRAN (R 4.1.3)
##  generics        0.1.3      2022-07-05 [1] CRAN (R 4.1.2)
##  ggplot2       * 3.4.0      2022-11-04 [1] CRAN (R 4.1.3)
##  ggpubr        * 0.5.0      2022-11-16 [1] CRAN (R 4.1.3)
##  ggsignif        0.6.4      2022-10-13 [1] CRAN (R 4.1.3)
##  glasso          1.11       2019-10-01 [1] CRAN (R 4.1.1)
##  glmnet          4.1-4      2022-04-15 [1] CRAN (R 4.1.3)
##  globals         0.16.2     2022-11-21 [1] CRAN (R 4.1.2)
##  glue            1.6.2      2022-02-24 [1] CRAN (R 4.1.3)
##  gmp             0.6-8      2022-11-09 [1] CRAN (R 4.1.3)
##  gower           1.0.0      2022-02-03 [1] CRAN (R 4.1.2)
##  gridExtra       2.3        2017-09-09 [1] CRAN (R 4.1.2)
##  gsl             2.1-7.1    2021-11-02 [1] CRAN (R 4.1.2)
##  gtable          0.3.1      2022-09-01 [1] CRAN (R 4.1.3)
##  gtools          3.9.3      2022-07-11 [1] CRAN (R 4.1.3)
##  hardhat         1.2.0      2022-06-30 [1] CRAN (R 4.1.3)
##  heatmaply     * 1.4.0      2022-10-08 [1] CRAN (R 4.1.3)
##  highr           0.10       2022-12-22 [1] CRAN (R 4.1.3)
##  Hmisc         * 4.7-2      2022-11-18 [1] CRAN (R 4.1.3)
##  htmlTable       2.4.1      2022-07-07 [1] CRAN (R 4.1.2)
##  htmltools       0.5.4.9000 2023-01-10 [1] Github (rstudio/htmltools@f07ceba)
##  htmlwidgets   * 1.5.4      2021-09-08 [1] CRAN (R 4.1.2)
##  httpuv          1.6.6      2022-09-08 [1] CRAN (R 4.1.3)
##  httr            1.4.4      2022-08-17 [1] CRAN (R 4.1.3)
##  igraph          1.3.5      2022-09-22 [1] CRAN (R 4.1.3)
##  interp          1.1-3      2022-07-13 [1] CRAN (R 4.1.3)
##  ipred           0.9-13     2022-06-02 [1] CRAN (R 4.1.3)
##  iterators       1.0.14     2022-02-05 [1] CRAN (R 4.1.2)
##  jpeg            0.1-9      2021-07-24 [1] CRAN (R 4.1.1)
##  jquerylib       0.1.4      2021-04-26 [1] CRAN (R 4.1.2)
##  jsonlite        1.8.3      2022-10-21 [1] CRAN (R 4.1.2)
##  KernSmooth      2.23-20    2021-05-03 [1] CRAN (R 4.1.2)
##  knitr           1.41       2022-11-18 [1] CRAN (R 4.1.3)
##  labeling        0.4.2      2020-10-20 [1] CRAN (R 4.1.1)
##  later           1.3.0      2021-08-18 [1] CRAN (R 4.1.3)
##  lattice       * 0.20-45    2021-09-22 [1] CRAN (R 4.1.2)
##  latticeExtra    0.6-30     2022-07-04 [1] CRAN (R 4.1.2)
##  lava            1.7.0      2022-10-25 [1] CRAN (R 4.1.3)
##  lavaan          0.6-12     2022-07-04 [1] CRAN (R 4.1.3)
##  lazyeval        0.2.2      2019-03-15 [1] CRAN (R 4.1.3)
##  lifecycle       1.0.3      2022-10-07 [1] CRAN (R 4.1.3)
##  listenv         0.8.0      2019-12-05 [1] CRAN (R 4.1.3)
##  lubridate       1.9.0      2022-11-06 [1] CRAN (R 4.1.3)
##  magrittr      * 2.0.3      2022-03-30 [1] CRAN (R 4.1.3)
##  MASS            7.3-58.1   2022-08-03 [1] CRAN (R 4.1.2)
##  Matrix          1.5-3      2022-11-11 [1] CRAN (R 4.1.3)
##  MatrixModels    0.5-1      2022-09-11 [1] CRAN (R 4.1.3)
##  mda             0.5-3      2022-05-05 [1] CRAN (R 4.1.3)
##  memoise         2.0.1      2021-11-26 [1] CRAN (R 4.1.2)
##  mgcv            1.8-41     2022-10-21 [1] CRAN (R 4.1.3)
##  mime            0.12       2021-09-28 [1] CRAN (R 4.1.1)
##  miniUI          0.1.1.1    2018-05-18 [1] CRAN (R 4.1.3)
##  mixture         2.0.5      2022-09-23 [1] CRAN (R 4.1.3)
##  mnormt          2.1.1      2022-09-26 [1] CRAN (R 4.1.2)
##  ModelMetrics    1.2.2.2    2020-03-17 [1] CRAN (R 4.1.3)
##  munsell         0.5.0      2018-06-12 [1] CRAN (R 4.1.2)
##  NlcOptim        0.6        2019-01-18 [1] CRAN (R 4.1.3)
##  nlme            3.1-160    2022-10-10 [1] CRAN (R 4.1.3)
##  nnet            7.3-18     2022-09-28 [1] CRAN (R 4.1.3)
##  numDeriv        2016.8-1.1 2019-06-06 [1] CRAN (R 4.1.1)
##  parallelly      1.32.1     2022-07-21 [1] CRAN (R 4.1.3)
##  pbapply         1.6-0      2022-11-16 [1] CRAN (R 4.1.3)
##  pbivnorm        0.6.0      2015-01-23 [1] CRAN (R 4.1.1)
##  pchc            0.8        2022-06-18 [1] CRAN (R 4.1.3)
##  pdist         * 1.2.1      2022-05-02 [1] CRAN (R 4.1.3)
##  permute         0.9-7      2022-01-27 [1] CRAN (R 4.1.3)
##  pheatmap        1.0.12     2019-01-04 [1] CRAN (R 4.1.2)
##  pillar          1.8.1      2022-08-19 [1] CRAN (R 4.1.3)
##  pkgbuild        1.3.1      2021-12-20 [1] CRAN (R 4.1.2)
##  pkgconfig       2.0.3      2019-09-22 [1] CRAN (R 4.1.2)
##  pkgload         1.3.2      2022-11-16 [1] CRAN (R 4.1.3)
##  plotly        * 4.10.1     2022-11-07 [1] CRAN (R 4.1.3)
##  plyr            1.8.8      2022-11-11 [1] CRAN (R 4.1.3)
##  png             0.1-7      2013-12-03 [1] CRAN (R 4.1.1)
##  prettyunits     1.1.1      2020-01-24 [1] CRAN (R 4.1.2)
##  pROC            1.18.0     2021-09-03 [1] CRAN (R 4.1.3)
##  processx        3.8.0      2022-10-26 [1] CRAN (R 4.1.3)
##  prodlim         2019.11.13 2019-11-17 [1] CRAN (R 4.1.3)
##  profvis         0.3.7      2020-11-02 [1] CRAN (R 4.1.3)
##  promises        1.2.0.1    2021-02-11 [1] CRAN (R 4.1.3)
##  proxy           0.4-27     2022-06-09 [1] CRAN (R 4.1.3)
##  ps              1.7.2      2022-10-26 [1] CRAN (R 4.1.3)
##  psych         * 2.2.9      2022-09-29 [1] CRAN (R 4.1.3)
##  purrr           0.3.5      2022-10-06 [1] CRAN (R 4.1.3)
##  qgraph          1.9.2      2022-03-04 [1] CRAN (R 4.1.3)
##  quadprog        1.5-8      2019-11-20 [1] CRAN (R 4.1.1)
##  quantreg        5.94       2022-07-20 [1] CRAN (R 4.1.3)
##  R6              2.5.1      2021-08-19 [1] CRAN (R 4.1.2)
##  RANN            2.6.1      2019-01-08 [1] CRAN (R 4.1.3)
##  RColorBrewer  * 1.1-3      2022-04-03 [1] CRAN (R 4.1.3)
##  Rcpp            1.0.9      2022-07-08 [1] CRAN (R 4.1.2)
##  RcppAlgos       2.6.0      2022-08-15 [1] CRAN (R 4.1.3)
##  RcppZiggurat    0.1.6      2020-10-20 [1] CRAN (R 4.1.3)
##  recipes         1.0.3      2022-11-09 [1] CRAN (R 4.1.3)
##  registry        0.5-1      2019-03-05 [1] CRAN (R 4.1.1)
##  remotes         2.4.2      2021-11-30 [1] CRAN (R 4.1.2)
##  reshape2        1.4.4      2020-04-09 [1] CRAN (R 4.1.3)
##  Rfast           2.0.6      2022-02-16 [1] CRAN (R 4.1.3)
##  Rfast2          0.1.3      2022-03-23 [1] CRAN (R 4.1.3)
##  rgl             0.110.2    2022-09-26 [1] CRAN (R 4.1.3)
##  rlang           1.0.6      2022-09-24 [1] CRAN (R 4.1.3)
##  rmarkdown       2.19.2     2023-01-10 [1] Github (rstudio/rmarkdown@8fabad0)
##  rnaturalearth   0.1.0      2017-03-21 [1] CRAN (R 4.1.3)
##  robustbase      0.95-0     2022-04-02 [1] CRAN (R 4.1.3)
##  rpart           4.1.19     2022-10-21 [1] CRAN (R 4.1.3)
##  rstatix       * 0.7.1      2022-11-09 [1] CRAN (R 4.1.3)
##  rstudioapi      0.14       2022-08-22 [1] CRAN (R 4.1.3)
##  sass            0.4.4      2022-11-24 [1] CRAN (R 4.1.3)
##  scales        * 1.2.1      2022-08-20 [1] CRAN (R 4.1.3)
##  seriation       1.4.0      2022-10-21 [1] CRAN (R 4.1.2)
##  sessioninfo     1.2.2      2021-12-06 [1] CRAN (R 4.1.2)
##  sf              1.0-9      2022-11-08 [1] CRAN (R 4.1.3)
##  shape           1.4.6      2021-05-19 [1] CRAN (R 4.1.1)
##  shiny           1.7.3      2022-10-25 [1] CRAN (R 4.1.3)
##  sn              2.1.0      2022-08-11 [1] CRAN (R 4.1.3)
##  sp              1.5-1      2022-11-07 [1] CRAN (R 4.1.3)
##  SparseM         1.81       2021-02-18 [1] CRAN (R 4.1.1)
##  SQUAREM         2021.1     2021-01-13 [1] CRAN (R 4.1.3)
##  stringi         1.7.8      2022-07-11 [1] CRAN (R 4.1.2)
##  stringr         1.5.0      2022-12-02 [1] CRAN (R 4.1.3)
##  survival      * 3.4-0      2022-08-09 [1] CRAN (R 4.1.3)
##  tibble          3.1.8      2022-07-22 [1] CRAN (R 4.1.3)
##  tidyr           1.2.1      2022-09-08 [1] CRAN (R 4.1.3)
##  tidyselect      1.2.0      2022-10-10 [1] CRAN (R 4.1.3)
##  timechange      0.1.1      2022-11-04 [1] CRAN (R 4.1.3)
##  timeDate        4021.106   2022-09-30 [1] CRAN (R 4.1.3)
##  TSP             1.2-1      2022-07-14 [1] CRAN (R 4.1.3)
##  units           0.8-0      2022-02-05 [1] CRAN (R 4.1.3)
##  urlchecker      1.0.1      2021-11-30 [1] CRAN (R 4.1.3)
##  usethis         2.1.6      2022-05-25 [1] CRAN (R 4.1.3)
##  utf8            1.2.2      2021-07-24 [1] CRAN (R 4.1.2)
##  vctrs           0.5.1      2022-11-16 [1] RSPM (R 4.1.0)
##  vegan           2.6-4      2022-10-11 [1] CRAN (R 4.1.3)
##  viridis       * 0.6.2      2021-10-13 [1] CRAN (R 4.1.2)
##  viridisLite   * 0.4.1      2022-08-22 [1] CRAN (R 4.1.3)
##  webshot         0.5.4      2022-09-26 [1] CRAN (R 4.1.3)
##  withr           2.5.0      2022-03-03 [1] CRAN (R 4.1.2)
##  xfun            0.35       2022-11-16 [1] CRAN (R 4.1.3)
##  xtable          1.8-4      2019-04-21 [1] CRAN (R 4.1.2)
##  yaml            2.3.6      2022-10-18 [1] CRAN (R 4.1.3)
## 
##  [1] C:/mzInstall/R/R-4.1.2/library
## 
## ------------------------------------------------------------------------------